package com.hckjsec.oa.service.impl;

import java.util.List;
import com.hckjsec.common.utils.DateUtils;
import com.hckjsec.common.utils.SecurityUtils;
import com.hckjsec.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.hckjsec.oa.mapper.OaDateMapper;
import com.hckjsec.oa.domain.OaDate;
import com.hckjsec.oa.service.IOaDateService;

/**
 * 公司OA日期Service业务层处理
 * 
 * @author cyt
 * @date 2021-12-21
 */
@Service
public class OaDateServiceImpl implements IOaDateService
{
    @Autowired
    private OaDateMapper oaDateMapper;

    /**
     * 查询公司OA日期
     * 
     * @param id 公司OA日期ID
     * @return 公司OA日期
     */
    @Override
    public OaDate selectOaDateById(Long id)
    {
        return oaDateMapper.selectOaDateById(id);
    }

    /**
     * 查询公司OA日期列表
     * 
     * @param oaDate 公司OA日期
     * @return 公司OA日期
     */
    @Override
    public List<OaDate> selectOaDateList(OaDate oaDate)
    {
        return oaDateMapper.selectOaDateList(oaDate);
    }

    /**
     * 新增公司OA日期
     * 
     * @param oaDate 公司OA日期
     * @return 结果
     */
    @Override
    public int insertOaDate(OaDate oaDate)
    {
        oaDate.setCreateTime(DateUtils.getNowDate());
        return oaDateMapper.insertOaDate(oaDate);
    }

    /**
     * 修改公司OA日期
     * 
     * @param oaDate 公司OA日期
     * @return 结果
     */
    @Override
    public int updateOaDate(OaDate oaDate)
    {
        oaDate.setUpdateTime(DateUtils.getNowDate());
        return oaDateMapper.updateOaDate(oaDate);
    }

    /**
     * 批量删除公司OA日期
     * 
     * @param ids 需要删除的公司OA日期ID
     * @return 结果
     */
    @Override
    public int deleteOaDateByIds(Long[] ids)
    {
        return oaDateMapper.deleteOaDateByIds(ids);
    }

    /**
     * 删除公司OA日期信息
     * 
     * @param id 公司OA日期ID
     * @return 结果
     */
    @Override
    public int deleteOaDateById(Long id)
    {
        return oaDateMapper.deleteOaDateById(id);
    }

    /**
     * 初始化数据
     *
     * @param id 公司OA日期ID
     * @return 结果
     */
    @Override
    public void initOaDate(Long year) {
        int count=0;
        OaDate oaDate = new OaDate();
        oaDate.setYear(year);
        List<OaDate> oaDateList = oaDateMapper.selectOaDateList(oaDate);
        if (StringUtils.isEmpty(oaDateList)){
            String  startTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,DateUtils.getYearFirst(year.intValue()));
            String  endTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,DateUtils.getYearLast(year.intValue()));
            String date ="";
            while (true){
                count++;
                if("".equals(date)){
                    date=startTime;
                }else{
                    date=DateUtils.getNextDayStr(date);
                }
                Long festival=0L;
                int flag=DateUtils.getCurWeekDayByStr(date);
                if(flag == 1 || flag == 7){
                    festival=1L;
                }
                OaDate findOaDate = new OaDate();
                findOaDate.setYear(year);
                findOaDate.setDate(DateUtils.dateTime(DateUtils.YYYY_MM_DD,date));
                findOaDate.setOldfestival(festival);
                findOaDate.setFestival(festival);
                findOaDate.setCreateBy(SecurityUtils.getUsername());
                findOaDate.setCreateTime(DateUtils.getNowDate());
                findOaDate.setUpdateBy(SecurityUtils.getUsername());
                findOaDate.setUpdateTime(DateUtils.getNowDate());
                oaDateMapper.insertOaDate(findOaDate);
                if(date.equals(endTime)){
                    break;
                }
            }
        }
    }


    /**
     * 批量修改日期 将日期修改为节假日
     *
     * @param data 需要修改的数据date
     * @return 结果
     */
    @Override
    public int updateOaDateYesFestival(String[] dates) {
        return oaDateMapper.updateOaDateYesFestival(dates);
    }

    /**
     * 批量修改日期 将日期修改为不是节假日
     *
     * @param data 需要修改的数据date
     * @return 结果
     */
    @Override
    public int updateOaDateNoFestival(String[] dates) {
        return oaDateMapper.updateOaDateNoFestival(dates);
    }

    /**
     * 批量修改日期 将日期恢复为初始化状态
     *
     * @param data 需要修改的数据date
     * @return 结果
     */
    @Override
    public int updateOaDateRecoveryFestival(String[] dates) {
        return oaDateMapper.updateOaDateRecoveryFestival(dates);
    }

    /**
     * 查询公司OA日期列表-日历
     *
     * @param oaDate 公司OA日期
     * @return 公司OA日期集合
     */
    @Override
    public List<OaDate> selectOaDateCalendar(OaDate oaDate) {
        return oaDateMapper.selectOaDateCalendar(oaDate);
    }
}
